home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / SYS / s / REXX.lha / texadr.wrx < prev    next >
Text File  |  1995-05-01  |  10KB  |  411 lines

  1. /* Programm zum Adressenimport */
  2.  
  3. /*
  4.  * Written 1993 by MGR, Asgard
  5.  * © 1993 by Lars Hanke
  6.  * contact: mgr@asgard.bo.open.de
  7.  *
  8.  * Bedienung:
  9.  *     Vorrausetzung: WRITE und DFA müssen beide einen AREXX Port haben
  10.  *
  11.  *     In folgender Priorität werden Namen aus der Datei gesucht
  12.  *
  13.  *     1) Markierter Block
  14.  *             Der Inhalt des Markierten Blocks wird *CASEINSENSITIV*
  15.  *             mit allen Feldern der Addressdatei verglichen. Stimmt
  16.  *             er mit einem Feld überein, so wird der gefundene Name
  17.  *             und die zugehörige Stadt in einem Requester angezeigt.
  18.  *             Handelt es sich nicht um den gewünschten, so wird nach
  19.  *             dem nächsten passenden Eintrag gesucht.
  20.  *
  21.  *     2) Selektierter Eintrag
  22.  *             Ist im DFA Fenster ein Eintrag selektiert, aber kein
  23.  *             Block vollständig markiert, so schlägt das Skript den
  24.  *             nächsten selektierten - inklusive dem aktuellen - Eintrag
  25.  *             vor. Folgt kein selektierter Eintrag, so wird die Datei
  26.  *             vom Anfang nach selektierten Einträgen durchsucht.
  27.  *             Wird der Eintrag abgelehnt, schlägt das Skript den
  28.  *             nächsten Selektierten vor. Folgen keine weiteren, wird
  29.  *             die Suche abgebrochen.
  30.  *
  31.  *     3) Aktuelles Wort
  32.  *             Mit dem Cursor als Ende bis zum Wortanfang wird der Inhalt
  33.  *             eingelesen, als Block markiert und ohne führende oder
  34.  *             abschließende Leerzeichen als Fragment für eine ebenfalls
  35.  *             *CASEINSENSITIVE* Suche in allen Feldern angegeben. Danach
  36.  *             ist der Ablauf analog zu 1)
  37.  *
  38.  *     Achtung: Die markierten Blöcke werden gelöscht, wenn die Suche
  39.  *              erfolgreich verlief.
  40.  *
  41.  *     Die Adresse wird Anhand des COUNTRY Eintrags für das Bestimmungsland
  42.  *     formattiert. Bislang werden folgende Staaten erkannt:
  43.  *             FRG - Deutschland (Staatenkennung nur D-PLZ)
  44.  *             NL  - Niederlande (Staatenkennung nur NL-PLZ)
  45.  *             USA
  46.  *             Canada
  47.  *             France
  48.  *             Belgium
  49.  *     Wird die Kennung nicht erkannt, wird eine deutsche Formattierung mit
  50.  *     ausgeschriebener Staatenkennung erzeugt. Im deutschen Formattierungs-
  51.  *     modul wird die Anrede "Herr" zu "Herrn" dekliniert. Im französisch-
  52.  *     belgischen Modul wird "Mlle." als "M\raisebox{0.5ex}{\scriptsize lle}"
  53.  *     gesetzt, analog "Mme.".
  54.  *
  55.  * Bugs:
  56.  *     - "SEARCHNEXT" in DFA scheint nicht vernuenftig zu funktionieren
  57.  *     - Das Skript arbeitet phantatstisch von der Shell, aber der Aufruf
  58.  *       aus WRITE selbts mittels "DoRexx" klappt nicht.
  59.  *
  60.  * Enhancements:
  61.  *     - Silent mode
  62.  *
  63.  * History:
  64.  *     v1.00 17.08.1993 - Grob lauffähig, kommentiert und dokumentiert
  65.  *     v1.01 17.08.1993 - DFA reagiert sauer auf 'SELECT QUERY', wenn noch
  66.  *                        nichts selektiert wurde. Das wird nun abgefangen.
  67.  *     v1.02 22.09.1993 - an WRITE 3.0 angepaßt
  68.  *     v1.03 23.10.1993 - Staatenkennung NL eingebaut, allerdings ist die
  69.  *                        Deklanation der Anrede derzeit unmoeglich, da ich
  70.  *                        kein Niederlaendisch kann.
  71.  *     v1.04 31.10.1993 - Hollädische Anreden nun eingebaut, dank Raymond Penners,
  72.  *                        Autor von PhoneBill, der mir die Briefanreden zusandte.
  73.  *
  74.  */
  75.  
  76. /*
  77.  * Check if WRITE and DFA are running
  78.  */
  79.  
  80. IF ~show('P',"WRITE")
  81. THEN DO
  82.  say 'This script does not make sense without the "WRITE" editor !'
  83.  exit 10
  84. END
  85.  
  86. address 'WRITE'
  87.  
  88. 'VERSIONCHECK 40000 "TeXAdr.wrx"'
  89. IF RC~=0 THEN DO
  90.   exit 10
  91. END
  92.  
  93. 'LockWindow _CurrentID'
  94. if (RC ~= 0)
  95. then do
  96.  'MessageOK "You should have a window!"'
  97.  exit 10
  98. end
  99.  
  100. IF ~show('P',"DFA")
  101. THEN DO
  102.  address 'WRITE'
  103.  'MessageOK "DFA not found!"'
  104.  'LockWindow 0'
  105.  exit 10
  106. END
  107.  
  108. /*
  109.  * Are there any selected entries in DFA?
  110.  */
  111.  
  112. selected=1
  113. address 'DFA'
  114. options results
  115. 'select query'
  116. if ((RESULT = 0) & (RC = 0))
  117. then do
  118.  'NEXTSEL'
  119.  if (RC ~= 0)
  120.  then do
  121.   'FIRST'
  122.   'NEXTSEL'
  123.   if (RC ~= 0)
  124.   then selected=0
  125.  end
  126. end
  127. else do
  128.  if (RC ~= 0) then selected=0
  129. end
  130.  
  131. /*
  132.  * A Blockmark in 'WRITE' overrides SELECT !
  133.  */
  134.  
  135. address 'WRITE'
  136. 'GETVAR "_MARKED"'
  137. if (RESULT = 2) then selected=0
  138. address 'DFA'
  139.  
  140. if (selected ~= 0)
  141. then do
  142.  
  143. /*
  144.  * browse through selections
  145.  */
  146.  
  147.  'GETCURRENT stem ADR.'
  148.  address 'WRITE'
  149.  'GETVAR "_XPOS"'
  150.  a.x=RESULT
  151.  'GETVAR "_YPOS"'
  152.  a.y=RESULT
  153.  found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n   at:' ADR.ADDRESS.5||'"'
  154.  cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
  155.  cmd
  156.  'GETVAR "_RN"'
  157.  cnt=RESULT
  158.  
  159.  do while (cnt ~= 0)
  160.   address 'DFA'
  161.   'NEXTSEL'
  162.   if (RC ~= 0)
  163.   then do
  164.    address 'WRITE'
  165.    'MessageOK "No more entries selected!"'
  166.    'LockWindow 0'
  167.    exit 5
  168.   end
  169.   'GETCURRENT stem ADR.'
  170.  
  171.   address 'WRITE'
  172.   found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n   at:' ADR.ADDRESS.5||'"'
  173.   cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
  174.   say cmd
  175.   cmd
  176.   'GETVAR "_RN"'
  177.   cnt=RESULT
  178.  end
  179.  
  180. end
  181. else do
  182.  
  183. /*
  184.  * Seek for a fitting entry
  185.  */
  186.  
  187.  address 'WRITE'
  188.  options results
  189.  'GETVAR "_MARKED"'
  190.  
  191.  automark=0
  192.  
  193.  if (RESULT < 2)
  194.  then do
  195.  
  196. /*
  197.  * No proper marked block, use current word
  198.  */
  199.  
  200.   'Unmark'
  201.   'SetMark'
  202.   'GETVAR "_MARKAX"'
  203.   b.x=RESULT
  204.   'GETVAR "_MARKAY"'
  205.   b.y=RESULT
  206.   'LastWord'
  207.   'SetMark'
  208.   automark=1
  209.   'GETVAR "_MARKAX"'
  210.   a.x=RESULT
  211.   'GETVAR "_MARKAY"'
  212.   a.y=RESULT
  213.  
  214.  end
  215.  else do
  216.   'GETVAR "_MARKAX"'
  217.   a.x=RESULT
  218.   'GETVAR "_MARKAY"'
  219.   a.y=RESULT
  220.   'GETVAR "_MARKBX"'
  221.   b.x=RESULT
  222.   'GETVAR "_MARKBY"'
  223.   b.y=RESULT
  224.  end
  225.  
  226. /*
  227.  * Read all chars in marked block
  228.  */
  229.  
  230.  pat=""
  231.  'GOTO' a.x a.y
  232.  c.x=a.x
  233.  c.y=a.y
  234.  DO UNTIL (((c.x > b.x) & (c.y >= b.y)) | ((a.x >= b.x) & (a.y >= b.y)))
  235.   'GETVAR "_CURRENTCHAR"'
  236.   pat=pat||RESULT
  237.   'CursorRight 1'
  238.   'GETVAR "_XPOS"'
  239.   c.x=RESULT
  240.   'GETVAR "_YPOS"'
  241.   c.y=RESULT
  242.  END
  243.  
  244.  pat=strip(pat);
  245.  
  246. /*
  247.  * Marked blocks are considered to be exact, last words may be fragments
  248.  */
  249.  
  250.  if (automark ~= 0)
  251.  then pat="#?"||pat||"#?"
  252.  
  253. /*
  254.  * Search the current pattern
  255.  */
  256.  
  257.  address 'DFA'
  258.  options results
  259.  'search' pat 'ignorecase fields=all stem ADR.'
  260.  if (RC ~= 0)
  261.  then do
  262.   address 'WRITE'
  263.   msg=pat||' not found!'
  264.   'MessageOK "'||msg||'"'
  265.   'LockWindow 0'
  266.   exit 5
  267.  end
  268.  
  269.  address 'WRITE'
  270.  found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n   at:' ADR.ADDRESS.5||'"'
  271.  cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
  272.  cmd
  273.  'GETVAR "_RN"'
  274.  cnt=RESULT
  275.  
  276. /*
  277.  * Search next occurence - anyhow, DFA seems to be in trouble with SEARCHNEXT
  278.  */
  279.  
  280.  do while (cnt ~= 0)
  281.   address 'DFA'
  282.   'searchnext stem ADR.'
  283.   if (RC ~= 0)
  284.   then do
  285.    address 'WRITE'
  286.    msg='No more matches for: '||pat
  287.    'MessageOK "'||msg||'"'
  288.    'LockWindow 0'
  289.    exit 5
  290.   end
  291.  
  292.   'GetCurrent stem ADR.'
  293.  
  294.   address 'WRITE'
  295.   found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n   at:' ADR.ADDRESS.5||'"'
  296.   cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
  297.   say cmd
  298.   cmd
  299.   'GETVAR "_RN"'
  300.   cnt=RESULT
  301.  end
  302.  
  303. /*
  304.  * Remove the bait from the text
  305.  */
  306.  
  307.  address 'WRITE'
  308.  'DeleteBlock'
  309.  'GOTO' a.x a.y
  310. end
  311.  
  312. /*
  313.  * We have somehow found the address we like and have it in ADR.ADDRESS
  314.  * now output it to WRITE according to the national address format and
  315.  * TeX style formatting characters.
  316.  */
  317.  
  318. 'WriteChar 37'
  319. 'Return'
  320. 'Tab 1'
  321.  
  322. select
  323.  when ADR.ADDRESS.6="FRG"
  324.  then do
  325.   anrede=ADR.ADDRESS.0
  326.   if (ADR.ADDRESS.0="Herr") then anrede="Herrn"
  327.   anrede="An "||anrede
  328.   'WriteText "'||anrede||'\\%"'
  329.   'Return'
  330.   'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
  331.   'Return'
  332.   'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
  333.   'Return'
  334.   'WriteText "{\bf D-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
  335.  end
  336.  when ADR.ADDRESS.6="NL"
  337.  then do
  338.   anrede=ADR.ADDRESS.0
  339.   if (ADR.ADDRESS.0="Heer") then anrede="De Heer"
  340.   if (ADR.ADDRESS.0="Vrouw") then anrede="Mevrouw"
  341.   if (ADR.ADDRESS.0="Juffrouw") then anrede="Mejuffrouw"
  342.   'WriteText "'||anrede||'\\%"'
  343.   'Return'
  344.   'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
  345.   'Return'
  346.   'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
  347.   'Return'
  348.   'WriteText "{\bf NL-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
  349.  end
  350.  when ((ADR.ADDRESS.6="France") | (ADR.ADDRESS.6="Belgium"))
  351.  then do
  352.   anrede=ADR.ADDRESS.0
  353.   if (anrede = "Mlle.") then anrede="M\raisebox{0.5ex}{\scriptsize lle}"
  354.   if (anrede = "Mme.") then anrede="M\raisebox{0.5ex}{\scriptsize me}"
  355.   anrede="Pour "||anrede
  356.   'WriteText "'||anrede||'\\%"'
  357.   'Return'
  358.   'WriteText "{\sc '||ADR.ADDRESS.1||'}' ADR.ADDRESS.2||'\\%"'
  359.   'Return'
  360.   'WriteText "'||ADR.ADDRESS.3||'\\%"'
  361.   'Return'
  362.   'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
  363.   'Return'
  364.   'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
  365.  end
  366.  when ADR.ADDRESS.6="USA"
  367.  then do
  368.   anrede=ADR.ADDRESS.0
  369.   anrede="To "||anrede
  370.   'WriteText "'||anrede||'\\%"'
  371.   'Return'
  372.   'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
  373.   'Return'
  374.   'WriteText "'||ADR.ADDRESS.3||'\\%"'
  375.   'Return'
  376.   'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
  377.   'Return'
  378.   'WriteText "'||ADR.ADDRESS.4 '\underline{USA}"'
  379.  end
  380.  when ADR.ADDRESS.6="Canada"
  381.  then do
  382.   anrede=ADR.ADDRESS.0
  383.   anrede="To "||anrede
  384.   'WriteText "'||anrede||'\\%"'
  385.   'Return'
  386.   'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
  387.   'Return'
  388.   'WriteText "'||ADR.ADDRESS.3||'\\%"'
  389.   'Return'
  390.   'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
  391.   'Return'
  392.   'WriteText "\underline{Canada}' ADR.ADDRESS.4||'"'
  393.  end
  394.  otherwise do
  395.   anrede=ADR.ADDRESS.0
  396.   'WriteText "'||anrede||'\\%"'
  397.   'Return'
  398.   'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
  399.   'Return'
  400.   'WriteText "'||ADR.ADDRESS.3||'\\%"'
  401.   'Return'
  402.   'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
  403.   'Return'
  404.   'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
  405.  end
  406. end
  407.  
  408. 'LockWindow 0'
  409. exit 0
  410.  
  411.